package com.lzm.one.grammar.enums;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.ToString;

/**
 * JavaRetainKey 枚举类用于表示 Java 编程语言中的保留关键字及其说明。
 * 每个枚举常量对应一个 Java 关键字，并包含该关键字的描述信息。
 * @Author LiZhiMin
 * @Date 2024/9/27 9:48
 */
@Getter
@AllArgsConstructor
public enum JavaRetainKey {
    // Java 关键字
    PACKAGE("package", "用于定义包"),
    IMPORT("import", "用于导入其他类或包"),
    CLASS("class", "用于声明类"),
    INTERFACE("interface", "用于声明接口"),
    ENUM("enum", "用于声明枚举类型"),

    // 访问修饰符
    PUBLIC("public", "表示公共访问权限"),
    PRIVATE("private", "表示私有访问权限"),
    PROTECTED("protected", "表示受保护的访问权限"),

    // 其他修饰符
    FINAL("final", "表示不可更改的变量、方法或类"),
    STATIC("static", "表示静态成员"),
    ABSTRACT("abstract", "用于声明抽象类或抽象方法"),
    NATIVE("native", "表示本地方法"),
    SYNCHRONIZED("synchronized", "用于多线程同步"),
    VOLATILE("volatile", "表示变量在多线程环境下的可见性"),
    TRANSIENT("transient", "用于序列化时忽略字段"),

    // 控制结构
    IF("if", "用于条件判断"),
    ELSE("else", "用于 if 语句的分支"),
    SWITCH("switch", "用于多分支选择"),
    CASE("case", "用于 switch 语句中的分支"),
    DEFAULT("default", "用于 switch 语句中的默认分支"),
    FOR("for", "用于循环"),
    WHILE("while", "用于循环"),
    DO("do", "用于 do-while 循环"),
    BREAK("break", "用于跳出循环或 switch 语句"),
    CONTINUE("continue", "用于继续循环的下一次迭代"),

    // 异常处理
    TRY("try", "用于捕获异常的代码块"),
    CATCH("catch", "用于捕获异常"),
    FINALLY("finally", "用于在异常处理之后执行代码"),
    THROW("throw", "用于抛出异常"),
    THROWS("throws", "用于声明方法可能抛出的异常"),

    // 数据类型
    BOOLEAN("boolean", "表示布尔类型"),
    BYTE("byte", "表示 8 位数据类型"),
    CHAR("char", "表示 16 位 Unicode 字符"),
    SHORT("short", "表示 16 位整数"),
    INT("int", "表示 32 位整数"),
    LONG("long", "表示 64 位整数"),
    FLOAT("float", "表示 32 位浮点数"),
    DOUBLE("double", "表示 64 位浮点数"),
    VOID("void", "表示无返回值的方法"),
    NULL("null", "表示空值"),

    // 其他保留字
    TRUE("true", "表示布尔值真"),
    FALSE("false", "表示布尔值假"),
    INSTANCEOF("instanceof", "用于测试对象是否为某个类的实例"),
    RETURN("return", "用于从方法返回值");

    private final String code;  // 关键字字符串
    private final String remark; // 关键字的说明

}
